package com.wang.springbootinit.controller.admin;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wang.springbootinit.common.BaseResponse;
import com.wang.springbootinit.common.ErrorCode;
import com.wang.springbootinit.common.ResultUtils;
import com.wang.springbootinit.model.entity.Honor;
import com.wang.springbootinit.model.param.HonorParam;
import com.wang.springbootinit.model.vo.HonorVO;
import com.wang.springbootinit.service.HonorService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 荣誉管理后台接口
 * 提供管理员对学生荣誉进行管理的HTTP接口
 * 包括荣誉申请的审核、荣誉信息的查询和统计等功能
 * 所有接口都需要管理员权限
 *
 * @author wang
 */
@RestController
@RequestMapping("/admin/honor")
public class AdminHonorController {
    
    @Resource
    private HonorService honorService;
    
    /**
     * 分页获取荣誉列表
     * 支持多条件组合查询，便于管理员进行荣誉管理
     * 结果按创建时间降序排序
     *
     * @param current 当前页码，默认为1
     * @param pageSize 每页显示记录数，默认为10
     * @param studentNumber 学生ID（可选），用于查询特定学生的荣誉
     * @param level 荣誉级别（可选），用于筛选特定级别的荣誉
     * @param status 审核状态（可选），用于筛选不同状态的荣誉
     * @return 分页结果，包含荣誉列表和分页信息
     */
    @GetMapping("/list")
    public BaseResponse<Page<HonorVO>> listHonors(
            @RequestParam(defaultValue = "1") long current,
            @RequestParam(defaultValue = "10") long pageSize,
            @RequestParam(required = false) String studentNumber,
            @RequestParam(required = false) String level,
            @RequestParam(required = false) Integer status) {
        Page<HonorVO> page = honorService.listHonors(current, pageSize, studentNumber, level, status);
        return ResultUtils.success(page);
    }
    
    /**
     * 添加荣誉
     * 管理员直接添加荣誉记录，无需经过审核流程
     * 用于特殊情况下的荣誉补录
     *
     * @param honor 荣誉信息，包含完整的荣誉详情
     * @return 新创建的荣誉ID
     */
    @PostMapping("/add")
    public BaseResponse<Boolean> addHonor(@RequestBody HonorParam param) {
        if (param == null) {
            return ResultUtils.error(ErrorCode.PARAMS_ERROR);
        }
        honorService.addHonor(param);
        return ResultUtils.success(true);
    }
    
    /**
     * 审核荣誉
     * 处理学生提交的荣誉申请
     * 可以通过或拒绝申请，并提供审核意见
     *
     * @param honor 包含审核结果的荣誉信息，必须包含ID、审核状态和审核意见
     * @param request HTTP请求对象，用于获取当前审核人信息
     * @return 审核操作是否成功
     */
    @PostMapping("/audit")
    public BaseResponse<Boolean> auditHonor(@RequestBody Honor honor, HttpServletRequest request) {
        if (honor == null || honor.getId() == null || honor.getStatus() == null) {
            return ResultUtils.error(ErrorCode.PARAMS_ERROR);
        }
        boolean result = honorService.auditHonor(honor, request);
        return ResultUtils.success(result);
    }
    
    /**
     * 获取荣誉详情
     * 查看单个荣誉的完整信息
     * 包括申请信息和审核信息
     *
     * @param id 荣誉ID
     * @return 荣誉的详细信息
     */
    @GetMapping("/get")
    public BaseResponse<Honor> getHonor(@RequestParam Long id) {
        if (id == null || id <= 0) {
            return ResultUtils.error(ErrorCode.PARAMS_ERROR);
        }
        Honor honor = honorService.getHonorById(id);
        return ResultUtils.success(honor);
    }
    
    /**
     * 获取荣誉统计信息
     * 统计荣誉的整体情况，支持按学生统计
     * 用于生成统计报表或数据分析
     *
     * @param studentId 学生ID（可选），如果提供则只统计该学生的荣誉
     * @return 统计结果，包含各级别荣誉的数量分布
     */
    @GetMapping("/statistics")
    public BaseResponse<List<Honor>> getHonorStatistics(
            @RequestParam(required = false) Long studentId) {
        List<Honor> statistics = honorService.getHonorStatistics(studentId);
        return ResultUtils.success(statistics);
    }
} 